/**
 * 
 */
package piece;

import core.Couleur;
import core.MutationException;
import core.PlacementException;
import echiquier.Case;
import echiquier.Jeu;

/**
 * Pièce de type pion
 * @author julien
 *
 */
public class Pion extends Piece {

	/**
	 * Constructeur
	 * @param casePiece
	 * @param jeu
	 * @throws PlacementException 
	 * @throws Exception
	 */
	public Pion(Case casePiece, Jeu jeu) throws PlacementException {
		super(casePiece, jeu, PieceType.Pion);
	}

	/**
	 * Détermine si le pion s'est déplacé
	 * @return
	 */
	public boolean sestDeplace() {
		return this.getCase().getCoordonnees().y != Couleur.getOrdonneesDepartPion(this.getCouleur());
	}
	
	/**
	 * Détermine si le pion doit muter
	 * @return
	 */
	public boolean doitMuter() {
		return (!estElimine() && Couleur.getOrdonneesMutationPion(getCouleur()) == getCase().getCoordonnees().y);
	}

	/**
	 * Fonction pour muter un pion
	 * @param type
	 * @throws MutationException
	 */
	public Piece mute(PieceType type) throws MutationException {
		// TODO Auto-generated method stub
		if (PieceType.estMutable(type) && this.doitMuter()) {
			this.getCase().departPiece();
			try {
				return this.getJeu().pionMute(this, type);
			} catch (Exception e) {
				throw new MutationException();
			}
		} else {
			throw new MutationException();
		}
	}
	
	/**
	 * Destructeur
	 */
	public void finalize() throws Throwable {
		super.finalize();
	}

}
